{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这仅仅是一个最简单的**单链表节点**，方便力扣出算法题来考你。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ListNode:\n",
    "    def __init__(self, x):\n",
    "        self.val = x\n",
    "        self.next = None"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在实际的编程语言中，我们使用的链表节点会稍微复杂一点，类似这样："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Node:\n",
    "    def __init__(self, prev, element, next):\n",
    "        self.val = element\n",
    "        self.next = next\n",
    "        self.prev = prev"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "主要区别有两个：\n",
    "\n",
    "1、编程语言标准库一般都会提供泛型，即你可以指定 `val` 字段为任意类型，而力扣的单链表节点的 `val` 字段只有 int 类型。\n",
    "\n",
    "2、编程语言标准库一般使用的都是双链表而非单链表。单链表节点只有一个 `next` 指针，指向下一个节点；而双链表节点有两个指针，`prev` 指向前一个节点，`next` 指向下一个节点。\n",
    "\n",
    "有了 `prev` 前驱指针，链表支持双向遍历，但由于要多维护一个指针，增删查改时会稍微复杂一些，后面带大家实现双链表时会具体介绍。"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
